// 注册全局路径别名
require('module-alias/register');

const express = require('express');

// 引入中间件
const responseMiddleware = require('@/middleware/response')
const errorHandler = require('@/middleware/errorHandler')

// 引入模块路由
// const userRoutes = require('@/modules/user/routes')
const router = require('@/router/index')

const app = express();

// 跨域中间件
const cors = require('cors');
app.use(cors()); // 默认允许所有跨域请求

// 配置解析表单数据的中间件，只能解析 application/x-www-form-urlencoded 格式的表单数据
app.use(express.urlencoded({ extended: false }));

// 封装全局响应处理中间件
app.use(responseMiddleware)

// user 路由（无需 token）
app.use('/user', router.user)

// 配置解析 token 的中间件（只对需要校验的路由生效）
const { expressjwt: expressJWT } = require('express-jwt')
const { jwtSecretKey } = require('@/config/jwt')
const jwtMiddleware = expressJWT({ secret: jwtSecretKey, algorithms: ['HS256'] })

// 其他需要 token 校验的路由在这里添加，并显式应用 token 中间件
// app.use('/api', jwtMiddleware, router.api)
// ...

// 404 中间件（未匹配到任何路由才会到这里，不校验 token）
app.use((req, res) => {
  return res.error(404, '请求的资源不存在！')
})

// 全局错误处理中间件
app.use(errorHandler)

app.listen(8080, () => {
  console.log('服务启动成功！');
});